package cn.com.cifi.mars.service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.extension.service.IService;

import cn.com.cifi.mars.bean.dto.NewestVersionDto;
import cn.com.cifi.mars.bean.dto.SupplyPlanVersionDto;
import cn.com.cifi.mars.bean.vo.supply.SupplyPlanVersionsVO;
import cn.com.cifi.mars.common.bean.R;
import cn.com.cifi.mars.entity.PriceVersion;
import cn.com.cifi.mars.entity.SupplyPlanVersion;
import cn.com.cifi.mars.entity.SupplyPlanVersionDetail;
import cn.com.cifi.mars.entity.common.ProjectByStages;

/**
 * <p>
 * 供货计划版本表 服务类
 * </p>
 *
 * @author yyd
 * @since 2019-09-09
 */
public interface SupplyPlanVersionService extends IService<SupplyPlanVersion> {

	/**
	 * 
	 * 方法描述：根据分期ID获取最新的版本阶段类型
	 * 
	 * @param projectFid 分期ID
	 * 创建人：yyd 创建时间：2019年10月14日 下午5:51:49
	 */
	String queryNewestVersionStage(String projectFid);

	/**
	 * 
	 * 方法描述：基于价格版本Id生产供货计划版本（审批通过的价格版本）
	 * 
	 * @param priceVersionId 价格版本ID 
	 * @param alias 当前用户
	 * 创建人：yyd 创建时间：2019年9月9日 上午10:58:24
	 */
	void createSupplyPlanVersion(String priceVersionId, String versionType, String alias);
	
	boolean isValidSupplyPlanVersion(String supplyPlanVersionId);
	/**
	 * 
	 * 方法描述：货值定稿时生成供货计划版本
	 * 创建人：yyd 创建时间：2019年9月9日 上午10:58:24
	 */
	void finalizeCreateSupplyPlanVersion(String priceVersionId, String versionType, String alias);
	/**
	 * 方法描述：获取版本列表
	 * 
	 * @param projectFId 分期Id
	 * @param versionType 版本类型
	 * 创建人：yyd 创建时间：2019年9月11日 上午10:32:59
	 */
	List<SupplyPlanVersionsVO> queryVersions(String projectFId, String versionType);

	/**
	 * 方法描述：手动创建预算版
	 * @param projectFId 分期ID
	 * @param alias 当前用户
	 * 创建人：yyd 创建时间：2019年9月18日 上午11:05:55
	 */
	void createSupplyBudgetVersion(String projectFId,String alias);

	/**
	 * 方法描述：根据项目ID获取每个分期的最新版本
	 * 
	 * @param projectId 项目Id
	 * @param stageName 分期Name（条件筛选使用） 
	 * 创建人：yyd 创建时间：2019年10月14日 下午5:51:49
	 */
	List<SupplyPlanVersion> queryNewestVersionByProjectId(String projectId, String stageName);

	/**
	 * 
	 * 方法描述：获取版本阶段类型
	 * 
	 * @param versionId 版本Id
	 * 创建人：yyd 创建时间：2019年10月23日 下午4:08:37
	 */
	String queryVersionType(String versionId);

	/**
	 * 
	 * @Description：设置投资版考核标签
	 * @param versionId 供货版本ID
	 * @param projectFid 分期ID
	 * @author：yyd
	 * @date：2020年1月9日 下午5:44:04
	 */
	void setAssessmentTag(String versionId, String projectFid);
	/**
	 * 
	 * 方法描述：重新设置投资版考核标签
	 * 
	 * @param versionId 货值版本ID
	 * @param projectFid 分期ID 
	 * 创建人：yyd 创建时间：2019年11月20日 下午7:01:32
	 */
	void updateAssessmentTag(String versionId, String projectFid);
	/**
	 * 
	 * 方法描述：项目是否供货确认
	 * @param projectId 项目ID
	 * @return boolean
	 * 创建人：yyd
	 * 创建时间：2019年11月26日 下午2:43:19
	 */
	void isNeedSpplyConfirm(String projectId);
	/**
	 * 
	 * 方法描述：获取动态版数据
	 * @param projectId 项目ID
	 * @param versionDate 版本时间
	 * 创建人：yyd
	 * 创建时间：2019年11月28日 上午10:35:07
	 */
	List<SupplyPlanVersion> selectNewestDynamicVersion(String projectId, String versionDate);
	/**
	 * 
	 * @Description：获取版本数据
	 * @author：yyd
	 * @date：2020年2月6日 下午9:39:06
	 */
	SupplyPlanVersionDto selectVersionData(String versionId);

	/**
	 * 
	 * 方法描述：获取当前月份需要供货确认的版本
	 * @param curTimeStr 时间
	 * 创建人：yyd
	 * 创建时间：2019年11月28日 上午10:35:07
	 */
	List<SupplyPlanVersion> queryNeedSupplyConfirmVersion(String curTimeStr);
	/**
	 * 
	 * 方法描述：条件筛选集团或事业部下 项目存在动态版的版本信息
	 * @param projectIds 项目ID
	 * @param projectName 项目名称
	 * @param status 确认供货状态
	 * @param versionDate 版本日期
	 * 创建人：yyd
	 * 创建时间：2019年12月2日 下午3:15:50
	 */
	List<SupplyPlanVersionDto> selectDynamicVersionByOrgIdAndDate(List<String> projectIds, String projectName, Integer status,String versionDate,String endConfirmDate);
	/**
	 * 
	 * 方法描述：获取需要定稿的版本
	 * @param finalizeMonth 定稿的月份
	 * @param versionType 版本类型
	 * 创建人：yyd
	 * 创建时间：2019年12月4日 下午2:44:21
	 * @param versionType 
	 */
	List<SupplyPlanVersion> queryFinalizeVersions(List<String> priceIds, String versionType);
	/**
	 * 
	 * 方法描述：每月动态版定稿
	 * @param versionIds 版本ID
	 * 创建人：yyd
	 * 创建时间：2019年12月4日 下午5:33:46
	 */
	void setFinalizeVersion(List<String> versionIds);
	/**
	 * 
	 * @Description：判断是否存在预算版本
	 * @author：yyd
	 * @date：2020年2月6日 下午9:38:37
	 */
	boolean isExistBudgetVersion(String projectFid);
	/**
	 * 
	 * 方法描述：获取未确认版本
	 * @param date 归属月份
	 * @param versionType 版本类型
	 * 创建人：yyd
	 * 创建时间：2019年12月17日 上午11:07:18
	 */
	List<SupplyPlanVersion> queryUnconfirmedVersions(String date, String versionType);

	/**
	 * 
	 * @Description：供货确认门户待办信息
	 * @param projectId 项目ID
	 * @param versionId 版本ID
	 * @param type 1-确认供货；2-再次确认供货
	 * @author：yyd
	 * @date：2020年2月4日 下午4:51:44
	 */
	void sendBackLog(String projectId, String versionId,int type);
	/**
	 * 
	 * @Description：发送待办任务信息测试
	 * @author：yyd
	 * @date：2020年2月6日 下午9:38:10
	 */
	void sendToDoMsg(String projectId, String versionId,int type);

	/**
	 * 
	 * @Description：判断供货版本是否确认
	 * @author：yyd
	 * @date：2020年2月13日 上午11:29:51
	 */
	boolean supplyIsComfirm(String priceVersionId);
	
	boolean isBetweenComfirmTime();
	
	String getComfirmTime();
	
	String getAffiliationMonth(String date);
	
	/**
	 * 
	 * @Description：根据货值版本ID获取最新供货计划版本
	 * @param id 货值版本id
	 * @return List<SupplyPlanVersion>
	 * @author：yyd
	 * @date：2020年2月20日 上午11:20:42
	 */
	SupplyPlanVersion selectNewestVersionByPriceId(String id);

	boolean isNeedConfirmSupply(String projectId,String affiliationMonth);

	List<SupplyPlanVersionDetail> selectVersionDetailList(List<String> versionIds);

	void handleConfirmSupplyData(String month,String projectFid,String isSign,String isAll);
	
	List<ProjectByStages> selectProjectParentList();

	void deleteTodo(List<String> projectList);

	List<Map<String, Object>> selectStageInfo(String stageId, String createTime);

	boolean saveLog(String module,String title,String content,String isSuccess);
}
